package log

import (
	"errors"
	"log/slog"
	"os"
	"strings"
)

var StdLogger *slog.Logger

func init() {
	NewDefaultLogger("std.log")
}

func NewLogger(path string) *slog.Logger {

	for {
		mainlogger, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, os.ModePerm)
		if errors.Is(err, os.ErrNotExist) {
			dir := strings.Split(path, "/")
			err = os.Mkdir(dir[0], os.ModeDir)
			if err != nil {
				panic(err)
			}
			continue
		}
		return slog.New(slog.NewTextHandler(mainlogger, &slog.HandlerOptions{
			//AddSource: true,
			Level: slog.LevelDebug,
		}))
	}

}

func NewDefaultLogger(path string) *slog.Logger {
	if StdLogger == nil {
		StdLogger = NewLogger(path)
	}
	return StdLogger
}

func Error(msg string, err error) {
	StdLogger.Error(msg, "err", err)
}

func Info(msg string, args ...any) {
	StdLogger.Info(msg, args...)
}
